"""
数据处理计算
==============================================================================================
sortBy

对 RDD 数据进行排序，基于指定的排序逻辑

==============================================================================================
rdd.sortBy(func, ascending=False, numPartitions=1)

# func: (T) -> U ：告知 rdd 按照哪个数据进行排序，lambda x: x[1]，表示按照 rdd 的第2列数据进行排序
# ascending：True升序、False降序
# numPartitions：用多少分区排序

"""

# 演示RDD的flatMap成员方法的使用
from pyspark import SparkConf, SparkContext

# windows 中 spark 找不到对于的 python 解释器会报错
import os

os.environ["PYSPARK_PYTHON"] = "D:/python3.11/python.exe"
# 1、构建执行环境入口对象
conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)


# 准备一个RDD
rdd = (
    # 2、读取数据文件
    sc.textFile("word.txt")
    # 3、取出全部单词
    .flatMap(lambda x: x.split(" "))
    # 4、将所有单词转换成二元元组，单词为key，value设置为1
    .map(lambda x: (x, 1))
    # 5、分组并求和
    .reduceByKey(lambda x, y: x + y)
    # 6、对结果进行排序(ascending中，False为降序，True为升序)
    .sortBy(lambda x: x[1], ascending=False, numPartitions=1)
)
print(rdd.collect())
